  $(function () {

            //TODO 以下几个值请确保填上再调用示例里的sdk方法
            //具体可以到https://console.qcloud.com/cos 进行查看
            // var bucket = 'test';
            // var appid = '1250000000';
            // var sid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
            // var skey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
            // var region = 'gz';
            // //TODO 以上几个值请确保填上再调用示例里的sdk方法

            // var myFolder = '/';//需要操作的目录
            var cos;
            var folder = 'tmp';
            var bucket = '';
            $.ajax({
                url: 'https://29858960.qcloud.la/other/upload/create_nonreusable_signature',
                data: {file_name: 'basicprofile.jpg'},
                success: function(res){
                    if(res.code == 200){
                        var data = res.data;
                        folder = data.folder.toString();
                        bucket = data.bucket.toString();
                        cos = new CosCloud({
                            appid: data.appid.toString(),// APPID 必填参数
                            bucket: bucket,//bucketName 必填参数
                            region: data.region.toString(),//地域信息 必填参数 华南地区填gz 华东填sh 华北填tj
                            getAppSign: function (callback) {//获取签名 必填参数
                                //下面简单讲一下获取签名的几种办法，签名请做一次 url encode
                                //1.搭建一个鉴权服务器，自己构造请求参数获取签名，推荐实际线上业务使用，优点是安全性好，不会暴露自己的私钥
                                // $.ajax('SIGN_URL').done(function (data) {
                                //     var sig = data.sign.toString();
                                //     callback(sig);
                                // });


                                //2.直接在浏览器前端计算签名，需要获取自己的accessKey和secretKey, 一般在调试阶段使用
                                // var self = this;
                                // var random = parseInt(Math.random() * Math.pow(2, 32));
                                // var now = parseInt(new Date().getTime() / 1000);
                                // var e = now + 600; //签名过期时间为当前+600s
                                // var path = '';//多次签名这里填空
                                // var str = 'a=' + self.appid + '&k=' + sid + '&e=' + e + '&t=' + now + '&r=' + random +
                                //         '&f=' + path + '&b=' + self.bucket;

                                // var sha1Res = CryptoJS.HmacSHA1(str, skey);//这里使用CryptoJS计算sha1值，你也可以用其他开源库或自己实现
                                // var strWordArray = CryptoJS.enc.Utf8.parse(str);
                                // var resWordArray = sha1Res.concat(strWordArray);
                                // var res = resWordArray.toString(CryptoJS.enc.Base64);

                                // setTimeout(function () {//setTimeout模拟一下网络延迟的情况
                                //     callback(res);
                                // }, 1000);


                                //3.直接复用别人算好的签名字符串, 一般在调试阶段使用
                                callback(data.appsign.toString())


                            }// ,
                            // getAppSignOnce: function (callback) {//单次签名，参考上面的注释即可
                            //     var self = this;
                            //     var random = parseInt(Math.random() * Math.pow(2, 32));
                            //     var now = parseInt(new Date().getTime() / 1000);
                            //     var e = 0; //单次签名 expire==0
                            //     var path = self.path;
                            //     var str = 'a=' + self.appid + '&k=' + sid + '&e=' + e + '&t=' + now + '&r=' + random +
                            //             '&f=' + path + '&b=' + self.bucket;

                            //     var sha1Res = CryptoJS.HmacSHA1(str, skey);//这里使用CryptoJS计算sha1值，你也可以用其他开源库或自己实现
                            //     var strWordArray = CryptoJS.enc.Utf8.parse(str);
                            //     var resWordArray = sha1Res.concat(strWordArray);
                            //     var res = resWordArray.toString(CryptoJS.enc.Base64);

                            //     setTimeout(function () {//setTimeout模拟一下网络延迟的情况
                            //         callback(res);
                            //     }, 1000);
                            // }
                        });
                    }
                }
            })

            var successCallBack = function (result) {
                console.log('request success.');
                $("#result").val(JSON.stringify(result));
            };

            var errorCallBack = function (result) {
                result = result || {};
                console.log('request error:', result && result.message);
                $("#result").val(result.responseText || 'error');
            };

            var progressCallBack = function (curr, sha1) {
                var sha1CheckProgress = ((sha1 * 100).toFixed(2) || 100) + '%';
                var uploadProgress = ((curr || 0) * 100).toFixed(2) + '%';
                var msg = 'upload progress:' + uploadProgress + '; sha1 check:' + sha1CheckProgress + '.';
                console.log(msg);
                $("#result").val(msg);
            };

            var lastTaskId;
            var taskReady = function (taskId) {
                lastTaskId = taskId;
            };

            //上传文件,适合小于20M的文件上传
            $('#uploadFile').on('click', function () {
                $('#js-file').off('change').on('change', function (e) {
                    var file = e.target.files[0];
                    // 分片上传过程可能会有 op=upload_slice_list 的 POST 请求返回 404，不会影响上传：https://github.com/tencentyun/cos-js-sdk-v4/issues/16
                    cos.uploadFile(successCallBack, errorCallBack, progressCallBack, bucket, folder + file.name, file, 0, taskReady);//insertOnly==0 表示允许覆盖文件 1表示不允许
                    $('#form')[0].reset();
                    return false;
                });

                setTimeout(function () {
                    $('#js-file').click();
                }, 0);

                return false;
            });


            //分片上传文件,当选择大于20M大小的文件的时候用分片上传
            var taskId = 0;
            $('#sliceUploadFile').on('click', function () {


                $('#js-file').off('change').on('change', function (e) {
                    var file = e.target.files[0];
                    // 分片上传直接调用uploadFile方法，内部会判断是否需要分片
                    // 分片上传过程可能会有 op=upload_slice_list 的 POST 请求返回 404，不会影响上传：https://github.com/tencentyun/cos-js-sdk-v4/issues/16
                    taskId = cos.uploadFile(successCallBack, errorCallBack, progressCallBack, bucket, myFolder + file.name, file, 0, taskReady);//insertOnly==0 表示允许覆盖文件 1表示不允许

                    //分片上传也可以直接调用sliceUploadFile方法，分片大小设置暂定不超过1M
                    //cos.sliceUploadFile(successCallBack, errorCallBack, progressCallBack, bucket, myFolder + file.name, file, 0, 1024*1024);

                    $('#form')[0].reset();
                    return false;
                });

                setTimeout(function () {
                    $('#js-file').click();
                }, 0);

                return false;
            });
            
            $('#cancelTask').on('click', function () {
                cos.cancelTask(lastTaskId);
            });

        });